[org 0x1000]  ; 将loader代码放在内存0x1000的位置，是基于实模式的内存布局约束指定
dw 0x55aa  ; 调试魔数，用于判断错误，当boot读入0x1000位置时，得是0x55aa才认为正确，否则认为扇区有错误，防止错误蔓延

; 打印字符串
mov si, loading
call print

jmp $  ; 阻塞

loading:
    db "loader: loading on...", 10, 13, 0 ; 分别是 \n(换行) \r（将光标移动到气势位置） 0（字符串结束）

print:
    mov ah, 0x0e ; 设置的前置条件
    ; 创建一个循环打印
    .next:
        mov al, [si] ; 间接寻址，将si指向的字符放入al
        cmp al, 0 ; 和0比较，如果是0则表示字符串最后一个字符，循环结束
        jz .return ; jump if zero，当零标志位ZF为1时，执行跳转操作， cmp的两个操作数的值相等（相减为0），ZF标志位会被设置为1，则跳转到.return。
        ;jz指令的另一种写法是je指令，即jump if equal，它的作用与jz指令完全相同
        int 0x10  ; 如果不是最后一个0则要调用0x10中断bios的打印功能继续打印
        inc si ; 将si+1
        jmp .next
    .return:
    ret
